package br.com.sgbl.dao;

import br.com.sgbl.bean.ConfiguracaoParametros;
import br.com.sgbl.utils.Conexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Leandro
 */
public class ConfiguracaoParametrosDao {
    
    private static final String SQL_LISTAR =
            "SELECT * FROM configuracao order by id";
    private static final String SQL_INSERIR =
            "INSERT INTO configuracao (id, valor_sangria, taxa_atendimento, saldo_inicial_caixa) VALUES (?,?,?,?)";
    private static final String SQL_ALTERAR =
            "UPDATE configuracao SET valor_sangria = ?, taxa_atendimento = ?, saldo_inicial_caixa = ? WHERE id = ?";
    
    public ConfiguracaoParametros salvar(ConfiguracaoParametros configuracaoParametros) throws SQLException, Exception {
        if(configuracaoParametros.getId() == 0) {
            return inserir(configuracaoParametros);
        }
        
        return alterar(configuracaoParametros);
    }
    
    private ConfiguracaoParametros inserir(ConfiguracaoParametros configuracao) throws SQLException, Exception {
        Connection conn = Conexao.getConnection();
        
        try {
            PreparedStatement ps = conn.prepareStatement(SQL_INSERIR,
                    PreparedStatement.RETURN_GENERATED_KEYS);
            
            ps.setNull(1, Types.NULL);
            ps.setDouble(2, configuracao.getSaldoInicialCaixa());
            ps.setDouble(3, configuracao.getValorSangria());
            ps.setInt(4, configuracao.getTaxaAtendimento());

            ps.executeUpdate();

            ResultSet rs = ps.getGeneratedKeys();
            rs.first();

            configuracao.setId(rs.getLong("GENERATED_KEY"));

            conn.commit();
        } finally {
            conn.close();
        }

        return configuracao;
    }
    
     private ConfiguracaoParametros alterar(ConfiguracaoParametros configuracaoParametros) throws SQLException {
        Connection conn = Conexao.getConnection();

        try {
            PreparedStatement ps = conn.prepareStatement(SQL_ALTERAR);

            ps.setDouble(1, configuracaoParametros.getValorSangria());
            ps.setInt(2, configuracaoParametros.getTaxaAtendimento());
            ps.setDouble(3, configuracaoParametros.getSaldoInicialCaixa());
            ps.setLong(4, configuracaoParametros.getId());
            
            ps.executeUpdate();

            conn.commit();
        } finally {
            conn.close();
        }

        return configuracaoParametros;
    }
     
     public ConfiguracaoParametros listar() throws SQLException {
        List<ConfiguracaoParametros> lista = new ArrayList<ConfiguracaoParametros>();

        Connection conn = Conexao.getConnection();

        try {
            PreparedStatement ps = conn.prepareStatement(SQL_LISTAR);
            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                ConfiguracaoParametros configuracaoParametros = new ConfiguracaoParametros(rs.getLong("id"), rs.getDouble("valor_sangria"), rs.getDouble("saldo_inicial_caixa"), rs.getInt("taxa_atendimento"));
                
                lista.add(configuracaoParametros);
            }
        } finally {
            conn.close();
        }

        return lista.get(0);
    }
}
